package com.bzsg.simpleMediaPlayer.ui.theme

import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext

/* 定义主题色
1. **主色调 (Primary)**
    - `primary`：应用的主品牌色（如按钮、选中状态）
    - `onPrimary`：主色上的内容颜色（文字/图标）
    - `primaryContainer`：主色容器背景（如导航栏）
    - `onPrimaryContainer`：容器上的内容颜色
    - `inversePrimary`：深色主题中使用的反转主色

2. **辅助色调 (Secondary)**
   - `secondary`：次要品牌色（浮动按钮、标签）
   - `onSecondary`：辅助色上的内容
   - `secondaryContainer`：辅助色容器
   - `onSecondaryContainer`：容器上的内容

3. **第三色调 (Tertiary)**
   - `tertiary`：强调色（进度条、高亮元素）
   - `onTertiary`：第三色上的内容
   - `tertiaryContainer`：第三色容器
   - `onTertiaryContainer`：容器上的内容

### 🖼 背景与表面
4. **背景色系**
    - `background`：应用整体背景色
    - `onBackground`：背景上的主要内容（如正文）
    - `surface`：卡片/对话框等表面颜色
    - `onSurface`：表面上的内容
    - `surfaceTint`：表面上的主色微调（默认同 `primary`）

5. **表面变体**
   - `surfaceVariant`：次级表面（输入框背景）
   - `onSurfaceVariant`：次级表面上的内容（提示文字）
   - `inverseSurface`：深色模式下的表面色
   - `inverseOnSurface`：深色表面上的内容

### ⚠ 错误与状态
6. **错误状态**
    - `error`：错误提示色
    - `onError`：错误色上的内容（错误图标/文字）
    - `errorContainer`：错误容器（输入框错误背景）
    - `onErrorContainer`：容器上的错误内容

**🖌 边框与遮罩**
7. **轮廓与遮罩**
    - `outline`：分割线/边框颜色
    - `outlineVariant`：弱化边框（禁用状态）
    - `scrim`：遮罩层颜色（对话框背景）

### 📊 表面层级（Material 3 新增）
8. **表面容器层级**
   ```kotlin
   surfaceBright         // 最亮表面 (elevation 1)
   surfaceContainer      // 标准容器
   surfaceContainerHigh  // 较高容器 (elevation 2)
   surfaceContainerHighest // 最高容器 (elevation 3)
   surfaceContainerLow   // 较低容器
   surfaceContainerLowest // 最低容器 (elevation 0)
   surfaceDim            // 最暗表面
 */
private val DarkColorScheme =
    darkColorScheme(
        primary = Purple80,
        secondary = PurpleGrey80,
        tertiary = Pink80,
    )

private val LightColorScheme =
    lightColorScheme(
        primary = Purple40,
        secondary = PurpleGrey40,
        tertiary = Pink40,
    )

// Dynamic color is available on Android 12+
// 动态主题颜色是系统根据当前系统给的推荐颜色，不是自己定义的
// 不动态的话自己没设置的话根据默认的颜色给的主题颜色
@Composable
fun SimpleMediaPlayerTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    dynamicColor: Boolean = true,
    content: @Composable () -> Unit,
) {
    val colorScheme =
        when {
            dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
                val context = LocalContext.current
                if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
            }
            darkTheme -> DarkColorScheme
            else -> LightColorScheme
        }

    MaterialTheme(
        colorScheme = colorScheme,
        typography = Typography,
        content = content,
    )
}
